package modbus.protocol;

import lombok.NonNull;
import struct.PythonStruct;
import struct.StructValue;

public class HoldingRegistersMessage {

    public final static HoldingRegistersMessage build() {
        return new HoldingRegistersMessage();
    }

    public float[] parseHoldingRegistersToFloat(@NonNull String format, byte[] data) {
        StructValue structValue = PythonStruct.unpack(format, data);
        float[] values = new float[structValue.values.size()];
        for (int i = 0; i < structValue.values.size(); i++) {
            values[i] = ((Float) structValue.values.get(i)).floatValue();
        }
        return values;
    }

    public double[] parseHoldingRegistersToDouble(@NonNull String format, byte[] data) {
        StructValue structValue = PythonStruct.unpack(format, data);
        double[] values = new double[structValue.values.size()];
        for (int i = 0; i < structValue.values.size(); i++) {
            values[i] = ((Double)structValue.values.get(i)).doubleValue();
        }
        return values;
    }

    public Object[] parseHoldingRegistersToObject(@NonNull String format, byte[] data) {
        StructValue structValue = PythonStruct.unpack(format, data);
        Object[] values = new Object[structValue.values.size()];
        for (int i = 0; i < structValue.values.size(); i++) {
            values[i] = structValue.values.get(i);
        }
        return values;
    }

    public int[] parseHoldingRegistersToInt(@NonNull String format, byte[] data) {
        StructValue structValue = PythonStruct.unpack(format, data);
        int[] values = new int[structValue.values.size()];
        for (int i = 0; i < structValue.values.size(); i++) {
            values[i] = ((Integer)structValue.values.get(i)).intValue();
        }
        return values;
    }
}
